#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
cron: 50 5 * * *
new Env('天翼云盘签到')
"""
# 功能：天翼云盘个人签到，可以获取空间
# 网址：https://cloud.189.cn/web/main/file/folder/-11
# 变量：TYYP_COOKIE，多个账号需要建多个TYYP_COOKIE
# 其他：此版本使用cookie，网上目前大多用的账号密码脚本，但我2025年9月4日测试的不能用,所以提取了这个用cookie的版本
# 更新：20250925,发现cookie和User-Agent都要作为参数，官方用了User-Agent做哈希配对。
# 脚本日期：2025年9月4日
import time
import requests
import os

# ---------- 聚合推送配置 ----------
AGGRE_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'dailylog')

IMMEDIATE = False          # True 实时推送，False 汇总推送
def push(title, text=""):
    if IMMEDIATE:
        from notify import send
        send(title, text)
    else:
        with open(AGGRE_FILE, "a", encoding="utf-8") as f:
            f.write(f"{title}\n{text}\n{'-'*40}\n")

# 测试用环境变量
# os.environ['TYYP_COOKIE'] = ''

headers = {
    'User-Agent': '',
    'Referer': 'https://m.cloud.189.cn/zhuanti/2016/sign/index.jsp',
    'Host': 'm.cloud.189.cn',
    "Cookie": "",
    'Accept-Encoding': 'gzip, deflate',
}

# 个人签到函数
def user_checkin(cookie_str):
    rand = str(round(time.time() * 1000))
    url = f'https://api.cloud.189.cn/mkt/userSign.action?rand={rand}&clientType=TELEANDROID&version=8.6.3&model=SM-G930K'
    try:
        # 解析cookie_str中的ua和cookie部分
        if 'ua=' in cookie_str and 'cookie=' in cookie_str:
            # 提取ua部分
            ua_start = cookie_str.find('ua="') + 4
            ua_end = cookie_str.find('";', ua_start)
            if ua_start > 3 and ua_end > ua_start:
                user_agent = cookie_str[ua_start:ua_end]
                print(f"提取到的UA: {user_agent}")
                headers['User-Agent'] = user_agent
            
            # 提取cookie部分
            cookie_start = cookie_str.find('cookie="') + 8
            cookie_end = cookie_str.find('"', cookie_start)
            if cookie_start > 7 and cookie_end > cookie_start:
                cookie_value = cookie_str[cookie_start:cookie_end]
                print(f"提取到的Cookie: {cookie_value[:10]}.....{cookie_value[-10:]}")
                headers['Cookie'] = cookie_value
        else:
            # 如果不是预期格式，则直接使用整个字符串作为cookie
            print(f"未找到ua和cookie，直接使用原始cookie: {cookie_str[:10]}.....{cookie_str[-10:]}")
            headers['Cookie'] = cookie_str
        
        response = requests.get(url, headers=headers)
        response.raise_for_status()  # 检查请求是否成功
        data = response.json()
        netdiskBonus = data['netdiskBonus']
        if data.get('isSign') == "false":
            msg = f"https://cloud.189.cn/web/main/file/folder/-11 \n\n 本次签到获得{netdiskBonus}M空间"
            print(msg)
            return msg
        else:
            msg = f"https://cloud.189.cn/web/main/file/folder/-11 \n\n 已签到，获得{netdiskBonus}M空间"
            print(msg)
            return msg
    except Exception as e:
        msg = f"❌ \n\n https://cloud.189.cn/web/main/file/folder/-11 \n\n 签到失败，请更新cookie，错误信息：{e}"
        print(msg)
        return msg

# 执行签到
def main():
    print("开始执行天翼云盘签到任务")
    raw = os.getenv('TYYP_COOKIE', '').strip()
    if not raw:
        raise RuntimeError('环境变量 TYYP_COOKIE 未设置')

    cookies = [c.strip() for c in raw.split('\n') if c.strip()]
    all_messages = []

    # 现在 cookies 是一个 list，里面每一条就是一个账号的 cookie
    total_accounts = len(cookies)
    for idx, ck in enumerate(cookies, 1):
        print(f'账号{idx} 开始任务...')
        # 执行个人签到并收集结果
        result_msg = user_checkin(ck)
        all_messages.append(f"账号{idx}: {result_msg}")
        # 不是最后一条消息才等待
        if idx < total_accounts:
            time.sleep(10)
    
    # 合并所有消息并发送
    if all_messages:
        combined_msg = "\n\n".join(all_messages)
        push('天翼云盘签到', combined_msg)
        print(f"消息发送成功。")
    
    print("签到任务执行完毕")

if __name__ == "__main__":
    main()